package com.zijidelu.luframework.plugins.tomlock.core.annotation;

import com.zijidelu.luframework.plugins.tomlock.core.data.TomLockModeEnum;
import com.zijidelu.luframework.plugins.tomlock.core.handler.BaseTomLockHandler;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 锁注解。
 *
 * @author ZIJIDELU
 * @datetime 2025/4/9 22:48
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TomLock {
    /**
     * 锁描述，示例：testDLock
     */
    String desc() default "";

    /**
     * 模块名称
     */
    String module() default "";

    /**
     * 业务名称
     */
    String business() default "";

    /**
     * 计算分布式锁模式
     */
    TomLockModeEnum mode() default TomLockModeEnum.CALC_METHOD;

    /**
     * 分布式锁处理器
     */
    Class<? extends BaseTomLockHandler> handler() default BaseTomLockHandler.class;

    /**
     * 需要计算Key的参数名,SpEL表达式
     */
    String[] paramExpression() default {};

    /**
     * 超时时间
     */
    long timeout() default -1;

    /**
     * 过期时间
     */
    long expire() default -1;

}
